package org.com.mars.service.system;

import java.util.List;

import javax.annotation.Resource;

import org.com.mars.dao.system.SysGroupDao;
import org.com.mars.dao.system.SysRoleDao;
import org.com.mars.dao.system.SysUserDao;
import org.com.mars.dao.system.SysUserGroupDao;
import org.com.mars.dao.system.SysUserRoleDao;
import org.com.mars.pojo.system.SysGroup;
import org.com.mars.pojo.system.SysRole;
import org.com.mars.pojo.system.SysUser;
import org.com.mars.pojo.system.SysUserGroup;
import org.com.mars.pojo.system.SysUserRole;
import org.springframework.stereotype.Service;

/**
 * 通过UserDetailsService拿到用户信息后，authenticationManager对比用户的密码（即验证用户），
 * 然后这个AuthenticationProcessingFilter拦截器就过了。
 * 
 * @author BIG
 *
 */
@Service
public class SysUserService {

	@Resource
	private SysUserDao sysUserDao;
	
	@Resource
	private SysGroupDao sysGroupDao;
	
	@Resource
	private SysUserGroupDao sysUserGroupDao;
	
	@Resource
	private SysRoleDao sysRoleDao;
	
	@Resource
	private SysUserRoleDao sysUserRoleDao;

	/**
	 * 通过用户名取得用户的信息.
	 * 
	 * @param username
	 * @return
	 */
	public SysUser getSysUserByUserAccount(String useraccount) {
		SysUser user = sysUserDao.getSysUserByUserAccount(useraccount);
		return user;
	}

	/**
	 * 通过登陆用户ID取得用户的信息.
	 * 
	 * @param userId
	 * @return
	 */
	public SysUser getSysUserByUserId(String userId) {
		SysUser user = sysUserDao.getSysUserByUserId(userId);
		return user;
	}
	
	/**
	 * 查询ALL用户信息.
	 * 
	 * @return
	 */
	public List<SysUser> getSysUserAll() {
		List<SysUser> users = sysUserDao.getSysUserAll();
		return users;
	}
	
	/**
	 * 追加用户信息.
	 * 
	 * @param sysUser
	 * @return
	 */
	public int addSysUser(SysUser sysUser) {
		int result = sysUserDao.addSysUser(sysUser);
		return result;
	}
	
	/**
	 * 更新用户信息.
	 * 
	 * @param userId
	 * @return
	 */
	public int updateSysUserByUserId(String userId) {
		int result = sysUserDao.updateSysUserByUserId(userId);
		return result;
	}
	
	/**
	 * 更新用户信息(修改密码).
	 * 
	 * @param userId
	 * @return
	 */
	public int updateSysUserPwdByUserId(String userId, 
			String userPassword) {
		int result = sysUserDao.updateSysUserPwdByUserId(userId, userPassword);
		return result;
	}
	
	/**
	 * 删除用户信息（物理删除）.
	 * 
	 * @param userId
	 * @return
	 */
	public int delSysUserByUserId(String userId) {
		int result = sysUserDao.delSysUserByUserId(userId);
		return result;
	}
	
	/**
	 * 删除用户信息（伦理删除：禁用）.
	 * 
	 * @param userId
	 * @return
	 */
	public int delSysUserByUserId2(String userId) {
		int result = sysUserDao.delSysUserByUserId2(userId);
		return result;
	}
	
	/**
	 * 查询组所有信息 (可用only).
	 * 
	 * @return
	 */
	public List<SysGroup> getSysGroupAll2() {
		List<SysGroup> sysGroups = sysGroupDao.getSysGroupAll2();
		return sysGroups;
	}
	
	/**
	 * 根据用户ID查询该用户所在组。
	 * 
	 * @param userId
	 * @return
	 */
	public List<SysUserGroup> getSysUserGroupByUserId(String userId) {
		List<SysUserGroup> sysUserGroups = 
				sysUserGroupDao.getSysUserGroupByUserId(userId);
		return sysUserGroups;
	}
	
	/**
	 * 根据用户ID删除该用户组信息。
	 * 
	 * @param userId
	 * @return
	 */
	public int delSysUserGroupByUserId(String userId) {
		int result = 
				sysUserGroupDao.delSysUserGroupByUserId(userId);
		return result;
	}
	
	/**
	 * 根据用户ID追加该用户组信息。
	 * 
	 * @param userId
	 * @return
	 */
	public int addSysUserGroupByUserId(SysUserGroup sysUserGroup) {
		int result = sysUserGroupDao.addSysUserGroupByUserId(sysUserGroup);
		return result;
		
	}
	
	/**
	 * 查询角色所有信息 (可用only).
	 * 
	 * @return
	 */
	public List<SysRole> getSysRoleAll2() {
		List<SysRole> sysRoles = sysRoleDao.getSysRoleAll2();
		return sysRoles;
	}
	
	/**
	 * 根据用户ID查询该用户角色在组。
	 * 
	 * @param userId
	 * @return
	 */
	public List<SysUserRole> getSysUserRoleByUserId(String userId) {
		List<SysUserRole> sysUserRoles = 
				sysUserRoleDao.getSysUserRoleByUserId(userId);
		return sysUserRoles;
	}
	
	/**
	 * 根据用户ID删除该用户角色信息。
	 * 
	 * @param userId
	 * @return
	 */
	public int delSysUserRoleByUserId(String userId) {
		int result = 
				sysUserRoleDao.delSysUserRoleByUserId(userId);
		return result;
	}
	
	/**
	 * 根据用户ID追加该用户角色信息。
	 * 
	 * @param userId
	 * @return
	 */
	public int addSysUserRoleByUserId(SysUserRole sysUserRole) {
		int result = sysUserRoleDao.addSysUserRoleByUserId(sysUserRole);
		return result;
		
	}

}
